package com.ias.train.common;

import lombok.Data;

/**
 * @program: train
 * @description: 返回JSON数据格式类
 * @author: Daniel Shen
 * @create: 2022-04-23 15:21
 */
@Data
public class JsonResult<T> {
    private Integer code;
    private String msg;
    private String type;
    private T data;

    protected JsonResult() {}

    protected JsonResult(Integer code, String message, T data) {
        this.code = code;
        this.msg = message;
        this.data = data;
    }

    protected  JsonResult(Integer code, String message, T data, String type) {
        this.code = code;
        this.msg = message;
        this.type = type;
        this.data = data;
    }

    /**
     * 成功返回数据
     * @param message 提示消息
     * @return
     */
    public static <T> JsonResult<T> success(String message) {
        return success(null, message);
    }

    /**
     * 成功返回的数据
     * @param data 获取的数据
     * @return
     */
    public static <T> JsonResult<T> success(T data) {
        return success(data,"操作成功!");
    }

    /**
     * 成功返回的数据
     * @param data 获取的数据
     * @param message 提示消息
     * @param <T> 数据类型
     * @return
     */
    public static <T> JsonResult<T> success(T data, String message) {
        return new JsonResult<>(MessageStatusCode.SUCCESS.getCode(), message, data, MessageStatusType.SUCCESS.getType());
    }

    /**
     * 警告消息返回结果
     * @param messageException 异常信息
     * @param <T> 数据对象
     * @return JSON消息
     */
    public static <T> JsonResult<T> warn(MessageException messageException) {
        return new JsonResult<T>(messageException.getCode(),
                messageException.getMessage(),
                (T)messageException.getData(),
                MessageStatusType.WARN.getType());
    }

    /**
     * 错误消息返回结果
     * @param messageException 返回消息异常信息
     * @param <T> 数据对象
     * @return JSON消息
     */
    public static <T> JsonResult<T> error(MessageException messageException) {
        return new JsonResult<T>(messageException.getCode(),
                messageException.getMessage(),
                (T)messageException.getData(),
                MessageStatusType.ERROR.getType());
    }

    /**
     * 错误消息返回结果
     * @param exception 通用异常信息
     * @param <T> 数据对象
     * @return JSON消息
     */
    public static <T> JsonResult<T> error(Exception exception) {
        return new JsonResult<T>(-1,
                exception.getMessage(),
                (T)exception.getStackTrace().toString(),
                MessageStatusType.ERROR.getType());
    }
}
